package dao.LibraryDao;

import dao.BaseDao;
import common.model.Entity.libraryEntity.BookItem;
import common.model.Entity.libraryEntity.enums.BookStatus;

import java.sql.Connection;
import java.util.List;
import java.util.Optional;

/**
 * 图书副本数据访问接口。
 *
 * <p>负责 {@code t_book_item} 表的增删改查及与业务相关的查询。</p>
 */
public interface BookItemDao extends BaseDao<BookItem, Long> {

    /**
     * 根据图书 ISBN 及状态列表查询副本列表。
     *
     * @param bookIsbn   图书 ISBN
     * @param bookStatus 允许的副本状态列表；若为空列表则忽略状态条件
     * @return 匹配的副本列表，若不存在则返回 {@link Optional#empty()}
     */
    Optional<List<BookItem>> findByBookIsbnAndStatus(String bookIsbn, List<BookStatus> bookStatus);

    /**
     * 在指定事务连接内更新副本状态。
     *
     * @param conn   数据库连接（用于事务控制）
     * @param id     副本主键
     * @param status 目标状态
     * @return 更新成功返回 {@code true}，否则返回 {@code false}
     */
    boolean updateStatus(Connection conn, Long id, BookStatus status);

}
